↳ Prolog
↳ PrologToPiTRSProof
perm_in_ga(nil, nil) → perm_out_ga(nil, nil)
perm_in_ga(XS, cons(Y, YS)) → U3_ga(XS, Y, YS, split_in_gaa(XS, YS1, cons(Y, YS2)))
split_in_gaa(XS, nil, XS) → split_out_gaa(XS, nil, XS)
split_in_gaa(cons(X, XS), cons(X, YS1), YS2) → U2_gaa(X, XS, YS1, YS2, split_in_gaa(XS, YS1, YS2))
U2_gaa(X, XS, YS1, YS2, split_out_gaa(XS, YS1, YS2)) → split_out_gaa(cons(X, XS), cons(X, YS1), YS2)
U3_ga(XS, Y, YS, split_out_gaa(XS, YS1, cons(Y, YS2))) → U4_ga(XS, Y, YS, YS1, YS2, append_in_gga(YS1, YS2, ZS))
append_in_gga(nil, XS, XS) → append_out_gga(nil, XS, XS)
append_in_gga(cons(X, XS1), XS2, cons(X, YS)) → U1_gga(X, XS1, XS2, YS, append_in_gga(XS1, XS2, YS))
U1_gga(X, XS1, XS2, YS, append_out_gga(XS1, XS2, YS)) → append_out_gga(cons(X, XS1), XS2, cons(X, YS))
U4_ga(XS, Y, YS, YS1, YS2, append_out_gga(YS1, YS2, ZS)) → U5_ga(XS, Y, YS, perm_in_ga(ZS, YS))
U5_ga(XS, Y, YS, perm_out_ga(ZS, YS)) → perm_out_ga(XS, cons(Y, YS))
Infinitary Constructor Rewriting Termination of PiTRS implies Termination of Prolog
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
perm_in_ga(nil, nil) → perm_out_ga(nil, nil)
perm_in_ga(XS, cons(Y, YS)) → U3_ga(XS, Y, YS, split_in_gaa(XS, YS1, cons(Y, YS2)))
split_in_gaa(XS, nil, XS) → split_out_gaa(XS, nil, XS)
split_in_gaa(cons(X, XS), cons(X, YS1), YS2) → U2_gaa(X, XS, YS1, YS2, split_in_gaa(XS, YS1, YS2))
U2_gaa(X, XS, YS1, YS2, split_out_gaa(XS, YS1, YS2)) → split_out_gaa(cons(X, XS), cons(X, YS1), YS2)
U3_ga(XS, Y, YS, split_out_gaa(XS, YS1, cons(Y, YS2))) → U4_ga(XS, Y, YS, YS1, YS2, append_in_gga(YS1, YS2, ZS))
append_in_gga(nil, XS, XS) → append_out_gga(nil, XS, XS)
append_in_gga(cons(X, XS1), XS2, cons(X, YS)) → U1_gga(X, XS1, XS2, YS, append_in_gga(XS1, XS2, YS))
U1_gga(X, XS1, XS2, YS, append_out_gga(XS1, XS2, YS)) → append_out_gga(cons(X, XS1), XS2, cons(X, YS))
U4_ga(XS, Y, YS, YS1, YS2, append_out_gga(YS1, YS2, ZS)) → U5_ga(XS, Y, YS, perm_in_ga(ZS, YS))
U5_ga(XS, Y, YS, perm_out_ga(ZS, YS)) → perm_out_ga(XS, cons(Y, YS))
PERM_IN_GA(XS, cons(Y, YS)) → U3_GA(XS, Y, YS, split_in_gaa(XS, YS1, cons(Y, YS2)))
PERM_IN_GA(XS, cons(Y, YS)) → SPLIT_IN_GAA(XS, YS1, cons(Y, YS2))
SPLIT_IN_GAA(cons(X, XS), cons(X, YS1), YS2) → U2_GAA(X, XS, YS1, YS2, split_in_gaa(XS, YS1, YS2))
SPLIT_IN_GAA(cons(X, XS), cons(X, YS1), YS2) → SPLIT_IN_GAA(XS, YS1, YS2)
U3_GA(XS, Y, YS, split_out_gaa(XS, YS1, cons(Y, YS2))) → U4_GA(XS, Y, YS, YS1, YS2, append_in_gga(YS1, YS2, ZS))
U3_GA(XS, Y, YS, split_out_gaa(XS, YS1, cons(Y, YS2))) → APPEND_IN_GGA(YS1, YS2, ZS)
APPEND_IN_GGA(cons(X, XS1), XS2, cons(X, YS)) → U1_GGA(X, XS1, XS2, YS, append_in_gga(XS1, XS2, YS))
APPEND_IN_GGA(cons(X, XS1), XS2, cons(X, YS)) → APPEND_IN_GGA(XS1, XS2, YS)
U4_GA(XS, Y, YS, YS1, YS2, append_out_gga(YS1, YS2, ZS)) → U5_GA(XS, Y, YS, perm_in_ga(ZS, YS))
U4_GA(XS, Y, YS, YS1, YS2, append_out_gga(YS1, YS2, ZS)) → PERM_IN_GA(ZS, YS)
perm_in_ga(nil, nil) → perm_out_ga(nil, nil)
perm_in_ga(XS, cons(Y, YS)) → U3_ga(XS, Y, YS, split_in_gaa(XS, YS1, cons(Y, YS2)))
split_in_gaa(XS, nil, XS) → split_out_gaa(XS, nil, XS)
split_in_gaa(cons(X, XS), cons(X, YS1), YS2) → U2_gaa(X, XS, YS1, YS2, split_in_gaa(XS, YS1, YS2))
U2_gaa(X, XS, YS1, YS2, split_out_gaa(XS, YS1, YS2)) → split_out_gaa(cons(X, XS), cons(X, YS1), YS2)
U3_ga(XS, Y, YS, split_out_gaa(XS, YS1, cons(Y, YS2))) → U4_ga(XS, Y, YS, YS1, YS2, append_in_gga(YS1, YS2, ZS))
append_in_gga(nil, XS, XS) → append_out_gga(nil, XS, XS)
append_in_gga(cons(X, XS1), XS2, cons(X, YS)) → U1_gga(X, XS1, XS2, YS, append_in_gga(XS1, XS2, YS))
U1_gga(X, XS1, XS2, YS, append_out_gga(XS1, XS2, YS)) → append_out_gga(cons(X, XS1), XS2, cons(X, YS))
U4_ga(XS, Y, YS, YS1, YS2, append_out_gga(YS1, YS2, ZS)) → U5_ga(XS, Y, YS, perm_in_ga(ZS, YS))
U5_ga(XS, Y, YS, perm_out_ga(ZS, YS)) → perm_out_ga(XS, cons(Y, YS))
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
PERM_IN_GA(XS, cons(Y, YS)) → U3_GA(XS, Y, YS, split_in_gaa(XS, YS1, cons(Y, YS2)))
PERM_IN_GA(XS, cons(Y, YS)) → SPLIT_IN_GAA(XS, YS1, cons(Y, YS2))
SPLIT_IN_GAA(cons(X, XS), cons(X, YS1), YS2) → U2_GAA(X, XS, YS1, YS2, split_in_gaa(XS, YS1, YS2))
SPLIT_IN_GAA(cons(X, XS), cons(X, YS1), YS2) → SPLIT_IN_GAA(XS, YS1, YS2)
U3_GA(XS, Y, YS, split_out_gaa(XS, YS1, cons(Y, YS2))) → U4_GA(XS, Y, YS, YS1, YS2, append_in_gga(YS1, YS2, ZS))
U3_GA(XS, Y, YS, split_out_gaa(XS, YS1, cons(Y, YS2))) → APPEND_IN_GGA(YS1, YS2, ZS)
APPEND_IN_GGA(cons(X, XS1), XS2, cons(X, YS)) → U1_GGA(X, XS1, XS2, YS, append_in_gga(XS1, XS2, YS))
APPEND_IN_GGA(cons(X, XS1), XS2, cons(X, YS)) → APPEND_IN_GGA(XS1, XS2, YS)
U4_GA(XS, Y, YS, YS1, YS2, append_out_gga(YS1, YS2, ZS)) → U5_GA(XS, Y, YS, perm_in_ga(ZS, YS))
U4_GA(XS, Y, YS, YS1, YS2, append_out_gga(YS1, YS2, ZS)) → PERM_IN_GA(ZS, YS)
perm_in_ga(nil, nil) → perm_out_ga(nil, nil)
perm_in_ga(XS, cons(Y, YS)) → U3_ga(XS, Y, YS, split_in_gaa(XS, YS1, cons(Y, YS2)))
split_in_gaa(XS, nil, XS) → split_out_gaa(XS, nil, XS)
split_in_gaa(cons(X, XS), cons(X, YS1), YS2) → U2_gaa(X, XS, YS1, YS2, split_in_gaa(XS, YS1, YS2))
U2_gaa(X, XS, YS1, YS2, split_out_gaa(XS, YS1, YS2)) → split_out_gaa(cons(X, XS), cons(X, YS1), YS2)
U3_ga(XS, Y, YS, split_out_gaa(XS, YS1, cons(Y, YS2))) → U4_ga(XS, Y, YS, YS1, YS2, append_in_gga(YS1, YS2, ZS))
append_in_gga(nil, XS, XS) → append_out_gga(nil, XS, XS)
append_in_gga(cons(X, XS1), XS2, cons(X, YS)) → U1_gga(X, XS1, XS2, YS, append_in_gga(XS1, XS2, YS))
U1_gga(X, XS1, XS2, YS, append_out_gga(XS1, XS2, YS)) → append_out_gga(cons(X, XS1), XS2, cons(X, YS))
U4_ga(XS, Y, YS, YS1, YS2, append_out_gga(YS1, YS2, ZS)) → U5_ga(XS, Y, YS, perm_in_ga(ZS, YS))
U5_ga(XS, Y, YS, perm_out_ga(ZS, YS)) → perm_out_ga(XS, cons(Y, YS))
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDP
APPEND_IN_GGA(cons(X, XS1), XS2, cons(X, YS)) → APPEND_IN_GGA(XS1, XS2, YS)
perm_in_ga(nil, nil) → perm_out_ga(nil, nil)
perm_in_ga(XS, cons(Y, YS)) → U3_ga(XS, Y, YS, split_in_gaa(XS, YS1, cons(Y, YS2)))
split_in_gaa(XS, nil, XS) → split_out_gaa(XS, nil, XS)
split_in_gaa(cons(X, XS), cons(X, YS1), YS2) → U2_gaa(X, XS, YS1, YS2, split_in_gaa(XS, YS1, YS2))
U2_gaa(X, XS, YS1, YS2, split_out_gaa(XS, YS1, YS2)) → split_out_gaa(cons(X, XS), cons(X, YS1), YS2)
U3_ga(XS, Y, YS, split_out_gaa(XS, YS1, cons(Y, YS2))) → U4_ga(XS, Y, YS, YS1, YS2, append_in_gga(YS1, YS2, ZS))
append_in_gga(nil, XS, XS) → append_out_gga(nil, XS, XS)
append_in_gga(cons(X, XS1), XS2, cons(X, YS)) → U1_gga(X, XS1, XS2, YS, append_in_gga(XS1, XS2, YS))
U1_gga(X, XS1, XS2, YS, append_out_gga(XS1, XS2, YS)) → append_out_gga(cons(X, XS1), XS2, cons(X, YS))
U4_ga(XS, Y, YS, YS1, YS2, append_out_gga(YS1, YS2, ZS)) → U5_ga(XS, Y, YS, perm_in_ga(ZS, YS))
U5_ga(XS, Y, YS, perm_out_ga(ZS, YS)) → perm_out_ga(XS, cons(Y, YS))
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ PiDP
↳ PiDP
APPEND_IN_GGA(cons(X, XS1), XS2, cons(X, YS)) → APPEND_IN_GGA(XS1, XS2, YS)
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ QDPSizeChangeProof
↳ PiDP
↳ PiDP
APPEND_IN_GGA(cons(XS1), XS2) → APPEND_IN_GGA(XS1, XS2)
From the DPs we obtained the following set of size-change graphs:
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
SPLIT_IN_GAA(cons(X, XS), cons(X, YS1), YS2) → SPLIT_IN_GAA(XS, YS1, YS2)
perm_in_ga(nil, nil) → perm_out_ga(nil, nil)
perm_in_ga(XS, cons(Y, YS)) → U3_ga(XS, Y, YS, split_in_gaa(XS, YS1, cons(Y, YS2)))
split_in_gaa(XS, nil, XS) → split_out_gaa(XS, nil, XS)
split_in_gaa(cons(X, XS), cons(X, YS1), YS2) → U2_gaa(X, XS, YS1, YS2, split_in_gaa(XS, YS1, YS2))
U2_gaa(X, XS, YS1, YS2, split_out_gaa(XS, YS1, YS2)) → split_out_gaa(cons(X, XS), cons(X, YS1), YS2)
U3_ga(XS, Y, YS, split_out_gaa(XS, YS1, cons(Y, YS2))) → U4_ga(XS, Y, YS, YS1, YS2, append_in_gga(YS1, YS2, ZS))
append_in_gga(nil, XS, XS) → append_out_gga(nil, XS, XS)
append_in_gga(cons(X, XS1), XS2, cons(X, YS)) → U1_gga(X, XS1, XS2, YS, append_in_gga(XS1, XS2, YS))
U1_gga(X, XS1, XS2, YS, append_out_gga(XS1, XS2, YS)) → append_out_gga(cons(X, XS1), XS2, cons(X, YS))
U4_ga(XS, Y, YS, YS1, YS2, append_out_gga(YS1, YS2, ZS)) → U5_ga(XS, Y, YS, perm_in_ga(ZS, YS))
U5_ga(XS, Y, YS, perm_out_ga(ZS, YS)) → perm_out_ga(XS, cons(Y, YS))
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ PiDP
SPLIT_IN_GAA(cons(X, XS), cons(X, YS1), YS2) → SPLIT_IN_GAA(XS, YS1, YS2)
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ QDPSizeChangeProof
↳ PiDP
SPLIT_IN_GAA(cons(XS)) → SPLIT_IN_GAA(XS)
From the DPs we obtained the following set of size-change graphs:
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ PiDP
↳ UsableRulesProof
U3_GA(XS, Y, YS, split_out_gaa(XS, YS1, cons(Y, YS2))) → U4_GA(XS, Y, YS, YS1, YS2, append_in_gga(YS1, YS2, ZS))
U4_GA(XS, Y, YS, YS1, YS2, append_out_gga(YS1, YS2, ZS)) → PERM_IN_GA(ZS, YS)
PERM_IN_GA(XS, cons(Y, YS)) → U3_GA(XS, Y, YS, split_in_gaa(XS, YS1, cons(Y, YS2)))
perm_in_ga(nil, nil) → perm_out_ga(nil, nil)
perm_in_ga(XS, cons(Y, YS)) → U3_ga(XS, Y, YS, split_in_gaa(XS, YS1, cons(Y, YS2)))
split_in_gaa(XS, nil, XS) → split_out_gaa(XS, nil, XS)
split_in_gaa(cons(X, XS), cons(X, YS1), YS2) → U2_gaa(X, XS, YS1, YS2, split_in_gaa(XS, YS1, YS2))
U2_gaa(X, XS, YS1, YS2, split_out_gaa(XS, YS1, YS2)) → split_out_gaa(cons(X, XS), cons(X, YS1), YS2)
U3_ga(XS, Y, YS, split_out_gaa(XS, YS1, cons(Y, YS2))) → U4_ga(XS, Y, YS, YS1, YS2, append_in_gga(YS1, YS2, ZS))
append_in_gga(nil, XS, XS) → append_out_gga(nil, XS, XS)
append_in_gga(cons(X, XS1), XS2, cons(X, YS)) → U1_gga(X, XS1, XS2, YS, append_in_gga(XS1, XS2, YS))
U1_gga(X, XS1, XS2, YS, append_out_gga(XS1, XS2, YS)) → append_out_gga(cons(X, XS1), XS2, cons(X, YS))
U4_ga(XS, Y, YS, YS1, YS2, append_out_gga(YS1, YS2, ZS)) → U5_ga(XS, Y, YS, perm_in_ga(ZS, YS))
U5_ga(XS, Y, YS, perm_out_ga(ZS, YS)) → perm_out_ga(XS, cons(Y, YS))
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
U3_GA(XS, Y, YS, split_out_gaa(XS, YS1, cons(Y, YS2))) → U4_GA(XS, Y, YS, YS1, YS2, append_in_gga(YS1, YS2, ZS))
U4_GA(XS, Y, YS, YS1, YS2, append_out_gga(YS1, YS2, ZS)) → PERM_IN_GA(ZS, YS)
PERM_IN_GA(XS, cons(Y, YS)) → U3_GA(XS, Y, YS, split_in_gaa(XS, YS1, cons(Y, YS2)))
append_in_gga(nil, XS, XS) → append_out_gga(nil, XS, XS)
append_in_gga(cons(X, XS1), XS2, cons(X, YS)) → U1_gga(X, XS1, XS2, YS, append_in_gga(XS1, XS2, YS))
split_in_gaa(XS, nil, XS) → split_out_gaa(XS, nil, XS)
split_in_gaa(cons(X, XS), cons(X, YS1), YS2) → U2_gaa(X, XS, YS1, YS2, split_in_gaa(XS, YS1, YS2))
U1_gga(X, XS1, XS2, YS, append_out_gga(XS1, XS2, YS)) → append_out_gga(cons(X, XS1), XS2, cons(X, YS))
U2_gaa(X, XS, YS1, YS2, split_out_gaa(XS, YS1, YS2)) → split_out_gaa(cons(X, XS), cons(X, YS1), YS2)
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ RuleRemovalProof
U4_GA(append_out_gga(ZS)) → PERM_IN_GA(ZS)
PERM_IN_GA(XS) → U3_GA(split_in_gaa(XS))
U3_GA(split_out_gaa(YS1, cons(YS2))) → U4_GA(append_in_gga(YS1, YS2))
append_in_gga(nil, XS) → append_out_gga(XS)
append_in_gga(cons(XS1), XS2) → U1_gga(append_in_gga(XS1, XS2))
split_in_gaa(XS) → split_out_gaa(nil, XS)
split_in_gaa(cons(XS)) → U2_gaa(split_in_gaa(XS))
U1_gga(append_out_gga(YS)) → append_out_gga(cons(YS))
U2_gaa(split_out_gaa(YS1, YS2)) → split_out_gaa(cons(YS1), YS2)
append_in_gga(x0, x1)
split_in_gaa(x0)
U1_gga(x0)
U2_gaa(x0)
U3_GA(split_out_gaa(YS1, cons(YS2))) → U4_GA(append_in_gga(YS1, YS2))
POL(PERM_IN_GA(x1)) = x1
POL(U1_gga(x1)) = 2 + x1
POL(U2_gaa(x1)) = 2 + x1
POL(U3_GA(x1)) = x1
POL(U4_GA(x1)) = x1
POL(append_in_gga(x1, x2)) = x1 + x2
POL(append_out_gga(x1)) = x1
POL(cons(x1)) = 2 + x1
POL(nil) = 0
POL(split_in_gaa(x1)) = x1
POL(split_out_gaa(x1, x2)) = x1 + x2
↳ Prolog
↳ PrologToPiTRSProof
↳ PiTRS
↳ DependencyPairsProof
↳ PiDP
↳ DependencyGraphProof
↳ AND
↳ PiDP
↳ PiDP
↳ PiDP
↳ UsableRulesProof
↳ PiDP
↳ PiDPToQDPProof
↳ QDP
↳ RuleRemovalProof
↳ QDP
↳ DependencyGraphProof
U4_GA(append_out_gga(ZS)) → PERM_IN_GA(ZS)
PERM_IN_GA(XS) → U3_GA(split_in_gaa(XS))
append_in_gga(nil, XS) → append_out_gga(XS)
append_in_gga(cons(XS1), XS2) → U1_gga(append_in_gga(XS1, XS2))
split_in_gaa(XS) → split_out_gaa(nil, XS)
split_in_gaa(cons(XS)) → U2_gaa(split_in_gaa(XS))
U1_gga(append_out_gga(YS)) → append_out_gga(cons(YS))
U2_gaa(split_out_gaa(YS1, YS2)) → split_out_gaa(cons(YS1), YS2)
append_in_gga(x0, x1)
split_in_gaa(x0)
U1_gga(x0)
U2_gaa(x0)